
import { initData } from './initData.js'
import { mount } from './compiler/index.js'
import { renderHelper } from './compiler/renderHelper.js'
import { patch } from './compiler/patch.js'
import { initComputed } from './initComputed.js'
// 定义vue
export default function Vue(options) {
  this._init(options)
}

/**
 * vue初始化
 * @param {*} options 
 */
Vue.prototype._init = function (options) {
  // 将配置挂到vue实例上
  this.$options = options
  // 初始化Data，将data的属性挂到Vue实例上，并设置响应式
  initData(this)
  // 初始化 computed 选项, 并代理到Vue实例上
  // 结合watcher实现缓存
  initComputed(this)
  // 安装运行时的渲染辅助函数（_c,_v）
  renderHelper(this)
  // 安装patch（虚拟dome对比）
  this.__patch__ = patch
  // 挂载 
  if (this.$options.el) {
    this.$mount()
  }
}

Vue.prototype.$mount = function() {
  mount(this)
}